// include/thread_pool.h
#ifndef THREAD_POOL_H
#define THREAD_POOL_H

#include <pthread.h>
#include <stdlib.h>
#include <stdbool.h>

typedef struct task
{
    void (*function)(void *);
    void *argument;
    struct task *next;
} thread_task_t;

typedef struct
{
    pthread_mutex_t lock;      // 互斥锁
    pthread_cond_t notify;     // 条件变量
    pthread_t *threads;        // 线程数组
    thread_task_t *queue_head; // 任务队列头
    thread_task_t *queue_tail; // 任务队列尾
    int thread_count;          // 线程数量
    int queue_size;            // 当前队列大小
    int max_queue_size;        // 最大队列大小
    int min_thread_count;      // 最小线程数
    int max_thread_count;      // 最大线程数
    bool shutdown;             // 关闭标志
} thread_pool_t;

thread_pool_t *thread_pool_create(int min_threads, int max_threads, int max_queue);
int thread_pool_add_task(thread_pool_t *pool, void (*function)(void *), void *argument);
int thread_pool_destroy(thread_pool_t *pool);

#endif /* THREAD_POOL_H */